const arr = [1,2,3, [4,5], [[6,7]], [[[8,9,10]]]]

// 方法1： 使用Array.flat(Infinity)
// console.log(arr.flat(Infinity));   // [1, 2, 3, 4,  5, 6, 7, 8, 9, 10]

// 方法2：遍历
function myFlat(arr) {
    let res = [];
    for (let i = 0; i < arr.length; i++) {
        if (Array.isArray(arr[i])) {
            res.push(...myFlat(arr[i]));
        } else {
            res.push(arr[i]);
        };
    };
    return res;
};

// console.log(myFlat(arr));  // [1, 2, 3, 4,  5, 6, 7, 8, 9, 10]

// 方法3：reduce方法
function myFlat1(arr) {
    return arr.reduce((prev, cur) => {
        return prev.concat(!Array.isArray(cur) ? cur : myFlat1(cur));
    }, []);
};

// console.log(myFlat1(arr));   // [1, 2, 3, 4,  5, 6, 7, 8, 9, 10]